1 module mruby.hash;
2 
3 import mruby.mrb_class;
4 import mruby.object;
5 import mruby.variable;
6 import mruby.value;
7 import mruby;
8 
9 extern (C):
10 
11 struct kh_ht;
12 
13 struct RHash
14 {
15 	enum mrb_vtype
16 	{
17 		MRB_TT_FALSE = 0,
18 		MRB_TT_FREE = 1,
19 		MRB_TT_TRUE = 2,
20 		MRB_TT_FIXNUM = 3,
21 		MRB_TT_SYMBOL = 4,
22 		MRB_TT_UNDEF = 5,
23 		MRB_TT_FLOAT = 6,
24 		MRB_TT_CPTR = 7,
25 		MRB_TT_OBJECT = 8,
26 		MRB_TT_CLASS = 9,
27 		MRB_TT_MODULE = 10,
28 		MRB_TT_ICLASS = 11,
29 		MRB_TT_SCLASS = 12,
30 		MRB_TT_PROC = 13,
31 		MRB_TT_ARRAY = 14,
32 		MRB_TT_HASH = 15,
33 		MRB_TT_STRING = 16,
34 		MRB_TT_RANGE = 17,
35 		MRB_TT_EXCEPTION = 18,
36 		MRB_TT_FILE = 19,
37 		MRB_TT_ENV = 20,
38 		MRB_TT_DATA = 21,
39 		MRB_TT_FIBER = 22,
40 		MRB_TT_MAXDEFINE = 23
41 	}
42 	mrb_vtype tt;
43 	uint color;
44 	uint flags;
45 	RClass* c;
46 	RBasic* gcnext;
47 	iv_tbl* iv;
48 	kh_ht* ht;
49 }
50 
51 mrb_value mrb_hash_new_capa (mrb_state*, int);
52 mrb_value mrb_hash_new (mrb_state* mrb);
53 void mrb_hash_set (mrb_state* mrb, mrb_value hash, mrb_value key, mrb_value val);
54 mrb_value mrb_hash_get (mrb_state* mrb, mrb_value hash, mrb_value key);
55 mrb_value mrb_hash_fetch (mrb_state* mrb, mrb_value hash, mrb_value key, mrb_value def);
56 mrb_value mrb_hash_delete_key (mrb_state* mrb, mrb_value hash, mrb_value key);
57 mrb_value mrb_hash_keys (mrb_state* mrb, mrb_value hash);
58 mrb_value mrb_check_hash_type (mrb_state* mrb, mrb_value hash);
59 mrb_value mrb_hash_empty_p (mrb_state* mrb, mrb_value self);
60 mrb_value mrb_hash_clear (mrb_state* mrb, mrb_value hash);
61 kh_ht* mrb_hash_tbl (mrb_state* mrb, mrb_value hash);
62 void mrb_gc_mark_hash (mrb_state*, RHash*);
63 size_t mrb_gc_mark_hash_size (mrb_state*, RHash*);
64 void mrb_gc_free_hash (mrb_state*, RHash*);